<?php
defined('ANT_ACCESS') or die('Access denided');
/**
 * Ant Framework
 *
 * An open source application development framework for PHP 5
 *
 * @package		Ant Framework
 * @author		Meshin Dmitriy
 * @copyright	Copyright (c) 2008, Meshin Dmitriy
 * @license		GNU Public Lisence v2
 * @link		http://code.google.com/p/ant-framework
 * @desc		URI class
 **/
	class ANT_url{
		public $uri_string;
		protected $controller = '';
		protected $method = 'index';
		protected $params = array();
		protected $configs;

		function __construct(){
			//	получаем строку запроса
			$this->getUriString();
			//	проверяем параметр на наличие запрещённых символов
			$this->uri_filter();
			//	дробим параметр
			$uri_array = explode("/", trim(urldecode($this->uri_string), '/'));
			//	если имя контроллера указано
			if(count($uri_array)>=1){
				$this->controller = strtolower(trim($uri_array[0]));
				//	если метод указан
				if(count($uri_array)>=2){
					$this->method = strtolower(trim($uri_array[1]));
					$this->params = array_slice($uri_array, 2);
				}
			}
			//	уничтожаем суперглобальные массивы
			$unsets = array(&$_GET, &$_REQUEST, &$GLOBALS, &$_ENV, &$HTTP_ENV_VARS, &$HTTP_GET_VARS);
			foreach($unsets as $item){
				try{
					unset($item);
				}
				catch(Exception $e){
					//
				}
			}
		}

		/*
		 *	Возвращает имя контроллера
		 * */
		public function getController(){
			return $this->controller;
		}

		/*
		 *	Возвращает имя вызываемого метода
		 * */
		public function getMethod(){
			return $this->method;
		}

		/*
		 *	Возвращает массив параметров
		 * */
		public function getParams(){
			return $this->params;
		}

		/*
		 *	Парсит запрос
		 * */
		protected function getUriString(){
			if (is_array($_GET) AND count($_GET) == 1 AND trim(key($_GET), '/') != '')
			{
				$this->uri_string = key($_GET);
				return 0;
			}
			$path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
			if (trim($path, '/') != '' AND $path != "/index".EXT)
			{
				$this->uri_string = $path;
				return 0;
			}
			$path =  (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
			if (trim($path, '/') != '')
			{
				$this->uri_string = $path;
				return 0;
			}
			$path = (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : @getenv('ORIG_PATH_INFO');
			if (trim($path, '/') != '' AND $path != "/index".EXT)
			{
				$this->uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $path);
				return 0;
			}
			$this->uri_string = '';
		}

		protected function uri_filter(){
			if($this->uri_string != ''){
				$this->configs =& get_config('configs');
				if (!preg_match("|^[".preg_quote($this->configs['permitted_uri_chars'])."]+$|i", $this->uri_string))
				{
					exit('The URI has disallowed characters');
				}
			}
		}
	}
?>